/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
/*
按照区间的左端点按从小到大排序
定义遍历r和l,l用来保存合并后区间的左边界start，r保存右边界end
如果后续区间的start小于r，说明是重复区间可以合并，更新合并后的区间的r
直到区间断开，将l和r插入vector
*/
class Solution {
public:
    static bool com(Interval v1,Interval v2)
    {
        return v1.start<v2.start;
    }
    vector<Interval> merge(vector<Interval> &intervals) {
        vector<Interval>vec;
        sort(intervals.begin(), intervals.end(),com);
        int n=intervals.size();
        int i=0;
        while(i<n)
        {
            int l=intervals[i].start;
            int r=intervals[i].end;
            while(i<n-1&&r>=intervals[i+1].start)
            {
                i++;
                r=max(intervals[i].end,r);
            }
            vec.push_back({l,r});
            i++;
        }
        return vec;
    }
};